#include "AS1217.h"


//AS1217初始化参数
//默认配置为 地址0x1234 无校验，波特率9600 空速1K 通信频率433M 默认打开无线接收 发送功率10dbm
const uint8_t g_AS1217_Config_Param[ 6 ] = { 0xC0, 0x12, 0x34, 0x18,  0x50, 0x18 };
                                                    //4660    //9600  //82--130信道 50--80信道
const char g_Shook_Hands_Ok[ 4 ] = { 'O', 'K', '\r', '\n' };
uint8_t g_Tx_Cmd[ 4 ] = { 0 };


/**
  * @brief :AS1217模块初始化
  * @param :无
  * @note  :按照默认参数初始化，修改默认参数表即可改变模块初始化参数
  * @retval:无
  */
void AS1217_param_init( void )
{
	drv_uart_tx_bytes((uint8_t *)g_AS1217_Config_Param, 6 );
}

/**
  * @brief :AS1217模块读配置参数
  * @param :
  *         @pReadBuffer：参数返回地址
  * @note  :无
  * @retval:无
  */
void AS1217_read_param( uint8_t *pReadBuffer )
{
	uint8_t Read_Cmd[ 3 ] = { 0xC1, 0xC1, 0xC1 };

	drv_uart_tx_bytes( Read_Cmd, 3 );
//	drv_uart_rx_bytes( pReadBuffer );
	
}

/**
  * @brief :AS1217模块发送握手指令
  * @param :无
  * @note  :无
  * @retval: 0：握手成功  1：握手失败
  */
	uint8_t Readbuff[ 4 ] = { 0 };
uint8_t AS1217_shook_hands( void )
{
	uint8_t i = 0;
	uint8_t Read_Cmd[ 3 ] = { 0xC2, 0xC2, 0xC2 };
	//uint8_t Readbuff[ 4 ] = { 0 };

	drv_uart_tx_bytes( Read_Cmd, 3 );
//	drv_uart_rx_bytes( Readbuff );
	
	for( i = 0; i < 4; i++ )
	{
		if( g_Shook_Hands_Ok[ i ] != Readbuff[ i ] )
		{
			break;
		}
	}
	
	if( 4 == i )
	{
		return 0;
	}
	else
	{
		return 1;
	}
}

/**
  * @brief :AS1217模块读取硬件版本号
  * @param :
  *         @pReadBuffer：硬件版本号返回地址
  * @note  :无
  * @retval:无
  */
void AS1217_read_version( uint8_t *pReadBuffer )
{
	uint8_t Read_Cmd[ 3 ] = { 0xC3, 0xC3, 0xC3 };

	drv_uart_tx_bytes( Read_Cmd, 3 );
//	drv_uart_rx_bytes( pReadBuffer );
}



/**
  * @brief :AS1217模块复位
  * @param :无
  * @note  :无
  * @retval:无
  */
void AS1217_reset( void )
{
	uint8_t Read_Cmd[ 3 ] = { 0xC4, 0xC4, 0xC4 };

	drv_uart_tx_bytes( Read_Cmd, 3 );
}

/**
  * @brief :AS1217模块进入低功耗模式
  * @param :无
  * @note  :无
  * @retval:无
  */
void AS1217_set_low_power( void )
{
	uint8_t Read_Cmd[ 3 ] = { 0xE1, 0xE1, 0xE1 };

	drv_uart_tx_bytes( Read_Cmd, 3 );
}

/**
  * @brief :AS1217模块发送数据（透传）
  * @param :无
  * @note  :无
  * @retval:无
  */
void AS1217_tx_packet( uint8_t *pTxBuff, uint8_t Length )
{
	drv_uart_tx_bytes( pTxBuff, Length );
}

/**
  * @brief :AS1217模块发送数据（定点模式、命令模式）
  * @param :
  *        @TxMode：发送完成后的模式 接收模式或低功耗模式
  *        @Addr_H：地址高位
  *        @Addr_L：地址低位
  *        @pTxBuff：发送数据地址
  *        @Length：发送数据个数
  * @note  :最大56个字节
  * @retval:无
  */
void AS1217_tx_packet_fixed_point( TxModeType TxMode, uint8_t Addr_H, uint8_t Addr_L, uint8_t *pTxBuff, uint8_t Length )
{	
	g_Tx_Cmd[ 0 ] = (uint8_t)TxMode;
	g_Tx_Cmd[ 1 ] = Length;
	g_Tx_Cmd[ 2 ] = Addr_H;
	g_Tx_Cmd[ 3 ] = Addr_L;
	
	drv_uart_tx_bytes( g_Tx_Cmd, 4 );
	//发送数据
	drv_uart_tx_bytes( pTxBuff, Length );
}

/**
  * @brief :AS1217模块接收数据
  * @param :无
  * @note  :一次最大56个
  * @retval:无
  */
uint8_t AS1217_rx_packet( uint8_t *pRxBuff )
{
	uint8_t Length = 0;
	
	//Length = drv_uart_rx_bytes( pRxBuff );
	
	return Length;
}


	
	void AS1217AUX_OUT(void)
{
    GPIO_InitTypeDef GPIO_InitStructure;
  
    RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOB,ENABLE ) ;
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_14 ;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;                       
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_Init(GPIOB, &GPIO_InitStructure);
}

	void AS1217AUX_IN(void)
{
    GPIO_InitTypeDef GPIO_InitStructure;
  
    RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOB,ENABLE ) ;
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_14 ;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;  
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;	
    GPIO_Init(GPIOB, &GPIO_InitStructure);
}